package com.cdeledu.volatile标识数组和对象;

import java.util.concurrent.TimeUnit;

/**volatile修饰对象和数组时，只是保证其引用地址的可见性，可为什么我加了volatile之后下面的代码会马上打印“结束”，
 * ThreadB在读取ints[0]时，首先要读取ints引用，这个引用是volatile修饰的,在读取这个ints引用时，所有变量都会从主存读取，其中就包含ints[0]。
 * @author DELL
 *
 */
public class VolatileArray {

	public static volatile int[] ints = new int[5];
	public static void main(String[] args) throws Exception {
	    Object o = new Object();
	    new Thread(() -> {
	        //线程A
	        try {
	            TimeUnit.MILLISECONDS.sleep(100);
	        } catch (InterruptedException e) {
	            e.printStackTrace();
	        }
	       ints[0] = 2;
	    }).start();
	    new Thread(() -> {            //线程B
	        while (true) {
	            if (ints[0] == 2) {
	                System.out.println("结束");
	                break;
	            }
	        }
	    }).start();
	}

}
